package com.gcb.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gcb.common.core.domain.entity.SysDept;
import com.gcb.domain.dto.*;
import com.gcb.domain.entity.Company;
import com.gcb.domain.vo.OperateCompanyVO;
import com.gcb.domain.vo.company.CompanyVO;
import com.gcb.domain.vo.company.CompanyPageListVo;

import java.util.List;


/**
 * 企业信息Service接口
 *
 * @author seh
 * @since  2024-03-08
 */
public interface ICompanyService extends IService<Company> {
    /**
     * 查询企业信息
     *
     * @param id 企业信息主键
     * @return 企业信息
     */
    Company selectCompanyById(Long id);

    /**
     * 查询企业信息列表
     *
     * @param company 企业信息
     * @return 企业信息集合
     */
    List<CompanyPageListVo> selectCompanyList(CompanyListSearchDTO company);

    /**
     * 新增企业信息
     *
     * @param company 企业信息
     * @return 结果
     */
    int insertCompany(Company company, Long currentUserId);

    /**
     * 修改企业信息
     *
     * @param company 企业信息
     * @return 结果
     */
    int updateCompany(Company company);

    /**
     * 批量删除企业信息
     *
     * @param ids 需要删除的企业信息主键集合
     * @return 结果
     */
    int deleteCompanyByIds(Long[] ids);


    /**
     * 批量更新企业状态
     */
    int batchUpdateCompanyStatus(UpdateCompanyStatusDto dto, Long currentUserId);

    /**
     * 转移企业超管
     *
     * @param dto 参数
     * @return int
     */
    int transferCompanySuperAdmin(TransferCompanySuperAdminDto dto, Long currentUserId);

    /**
     * 移出企业
     *
     * @param dto 参数
     * @return int
     */
    int leaveCompany(CompanyUserSaveDTO dto, Long currentUserId);

    /**
     * 更换企业用户角色
     *
     * @param dto 参数
     * @return int
     */
    int changeCompanyUserRole(CompanyUserSaveDTO dto, Long currentUserId);

    /**
     * 获取公司下拉列表
     *
     * @return list
     */
    List<OperateCompanyVO> getCompanyListByOperator(Integer status);

    /**
     * app创建企业
     * @param dto 企业信息
     */
    void addCompany( CompanySaveDTO dto);

    /**
     * 根据城市获取归属运营商id
     * @param city 城市
     * @return 归属运营商id
     */
    SysDept getOperateInfo(String city);

    /**
     * 获取APP企业认证详情
     * @param companyId 企业id
     * @return CompanyAppDetailVO
     */
    CompanyVO getDetail(String companyId);


}
